﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace PSE.Tools.ProjectDependencyDiscovery
{
	public class Projeto
	{
		/// <summary>
		/// Nome do arquivo do Projeto
		/// </summary>
		private string nome;
		public string Nome
		{
			get { return nome; }
			set { nome = value; }
		}

		/// <summary>
		/// Caminho Completo do Arquivo do Projeto 
		/// </summary>
		private string nomeCompleto;
		public string NomeCompleto
		{
			get { return nomeCompleto; }
			set { nomeCompleto = value; }
		}

        public string NomeAssembly { get; set; }

		/// <summary>
		/// Lista de dependencias do Projeto.
		/// Representam os projetos que precisam ser compilados antes deste Projeto
		/// </summary>
		private BindingList<Projeto> dependencias = new BindingList<Projeto>();
		public BindingList<Projeto> Dependencias
		{
			get { return dependencias; }
			set { dependencias = value; }
		}

		/// <summary>
		/// Corresponde ao pai do Projeto na arvore de dependencias
		/// </summary>
        private BindingList<Projeto> pai = new BindingList<Projeto>();
		public BindingList<Projeto> Pai
		{
			get { return pai; }
			set { pai = value; }
		}

		/// <summary>
		/// Flag que auxilia no processo de determinacao da sequencia de Build
		/// Quando o Projeto pode ser Compilado esta Flag eh atribuida para true
		/// </summary>
        //private Boolean resolvido;
        //public Boolean Resolvido
        //{
        //    get { return resolvido; }
        //    set { resolvido = value; }
        //}

		/// <summary>
		/// Flag que auxilia no processo de determinacao da sequencia de Build
		/// Conta a quantidade de filhos Resolvidos deste Projeto
		/// </summary>
		private int dependenciasResolvidas = 0;
		public int DependenciasResolvidas
		{
			get { return dependenciasResolvidas; }
			set { dependenciasResolvidas = value; }
		}

		/// <summary>
		/// Metodo que incrementa a variavel dependenciasResolvidas
		/// </summary>
		public void ResolverDependencia()
		{
			this.dependenciasResolvidas++;
		}
	}
}
